#ifndef AUDITCRYPTOGRAM_H
#define AUDITCRYPTOGRAM_H

#include "auditapi_global.h"

//#ifdef __cplusplus
//extern "C" {
//#endif

AUDITAPISHARED_EXPORT int apiSetBitcoinTest(bool _test);



AUDITAPISHARED_EXPORT int apiStdHashData(__api_in const char* const _data,
                                 __api_out  unsigned char* const _cryptolalia);



/**
 * @brief : 密语加密
 * @param : _data 待加密密语          in
 * @param : _cryptolalia 加密后的密语 out
 * @param : _key 密码                in
 * @return: 0正确，非0错误
*/
AUDITAPISHARED_EXPORT int apiEncryptionCryptolalia(
                                          __api_in const char* const _data,
                                          __api_in int _dataSize,
                                          __api_out char* _cryptolalia,
                                          __api_in const char* const _key);


/**
 * @brief : 密语解密
 * @param : _cryptolalia 待解密密语   in
 * @param : _data 解密后的数据        out
 * @param : _key 密码                in
 * @return: 0正确，非0错误
*/
AUDITAPISHARED_EXPORT int apiDecryptionCryptolalia(
                                          __api_in const char* const _cryptolalia,
                                          __api_in int _cryptolaliaSize,
                                          __api_out char* _data,
                                          __api_in const char* const _key);


////////////////////////////////////////////


/**
 * @brief : 签名
 * @param : _prvKey 私钥            in
 * @param : _data 被签名的数据       in
 * @param : _signa 签名             out
 * @return: 0正确，非0错误
*/
AUDITAPISHARED_EXPORT int apiSignature(__api_in const char* const _prvKey,
                                       __api_in const char* const _data,
                                       __api_out char* const _signa);

/**
 * @brief : 验证签名
 * @param : _addr 地址             in
 * @param : _signa 签名            in
 * @param : _data 被签名的数据      in
 * @return: 0正确，非0错误
*/
AUDITAPISHARED_EXPORT int apiVerifySignature(__api_in const char* const _addr,
                                             __api_in const char* const _signa,
                                             __api_in const char* const _data);


/////////////////////////////////////////////

/**
 * @brief : 生成主私钥
 * @param : _seed  种子            in
 * @param : _chain 链索引          in
 * @param : _prvKey 主私钥         out
 * @return: 0成功，非0异常
*/
AUDITAPISHARED_EXPORT int apiGeneratedMainPrvKey(__api_in const char* const _seed,
                                                 __api_in const char* const _chain,
                                                 __api_out char* const _prvKey);


/**
 * @brief : 生成子私钥
 * @param : _masterPrvKey 主私钥   in
 * @param : _chain 链索引          in
 * @param : _childPrvKey 子私钥    out
 * @return: 0成功，非0异常
*/
AUDITAPISHARED_EXPORT int apiGeneratedChildPrvKey(__api_in const char* const _masterPrvKey,
                                             __api_in const char* const _chain,
                                             __api_out char* const _childPrvKey);




/**
 * @brief : 生成主私钥的相关信息
 * @param : _prvKey 私钥          in
 * @param : _pubKey 公钥          out
 * @param : _addr   地址信息       out
 * @return: 0成功，非0异常
*/
AUDITAPISHARED_EXPORT int apiGeneratedPrvKeyInfo(__api_in const char* const _mainPrvKey,
                                                 __api_out char* const _ekPubKey,
                                                 __api_out char* const _pubKey,
                                                 __api_out char* const _prvKey,
                                                 __api_out char* const _address);

/**
 * @brief : 匹配公私钥
 * @param : _prvKey 私钥
 * @param : _pubKey 公钥
 * @return: 0匹配，非0不匹配
*/
AUDITAPISHARED_EXPORT int apiMatchPubPrvKey(__api_in const char* const _prvKey,
                                            __api_in const char* const _pubKey);




//////////////////////////////////////////////////

/**
* @brief : 文本数据标准加密流程
* @param : _filename 文件绝对路径
* @param : _mode     扩展参数
* @return: 0成功，非0失败
*/
AUDITAPISHARED_EXPORT int apiStdEncryptionFile(__api_in const char* const _filename,
                                               __api_in const int _mode);


AUDITAPISHARED_EXPORT int apiStdDecryptionFile(__api_in const char* const _filename,
                                               __api_in const int _mode);


//#ifdef __cplusplus
//}
//#endif
#endif // AUDITCRYPTOGRAM_H
